import requests

def parse_board(board_str):
    size = 15  # 棋盘的尺寸是15x15
    board = [['.' for _ in range(size)] for _ in range(size)]  # 初始化一个15x15的棋盘，用'.'填充
    letters = 'ABCDEFGHIJKLMNO'  # 棋盘行对应的字母

    for i in range(0, len(board_str), 2):  # 每两个字符代表一个坐标
        row = letters.index(board_str[i].upper())  # 获取行索引
        col = letters.index(board_str[i + 1].upper())  # 获取列索引
        if i // 2 % 2 == 0:  # 偶数步为'x'
            board[row][col] = 'x'
        else:  # 奇数步为'o'
            board[row][col] = 'o'

    return board  # 返回解析后的棋盘


def get_horizontal(board, row, col):
    line = []  # 初始化一个空列表存储水平线字符
    for c in range(col - 4, col + 5):  # 从col-4到col+5的范围内获取字符
        if 0 <= c < 15:  # 如果列索引在棋盘范围内
            line.append(board[row][c])  # 添加棋盘上的字符
        else:
            line.append('')  # 超出范围添加空字符
    return ''.join(line)  # 返回连接后的字符串


def get_diagonal_lr(board, row, col):
    line = []  # 初始化一个空列表存储左上到右下的对角线字符
    for i in range(-4, 5):  # 从-4到+5的范围内获取字符
        r = row + i  # 计算行索引
        c = col + i  # 计算列索引
        if 0 <= r < 15 and 0 <= c < 15:  # 如果行和列索引在棋盘范围内
            line.append(board[r][c])  # 添加棋盘上的字符
        else:
            line.append('')  # 超出范围添加空字符
    return ''.join(line)  # 返回连接后的字符串


def get_vertical(board, row, col):
    line = []  # 初始化一个空列表存储垂直线字符
    for r in range(row - 4, row + 5):  # 从row-4到row+5的范围内获取字符
        if 0 <= r < 15:  # 如果行索引在棋盘范围内
            line.append(board[r][col])  # 添加棋盘上的字符
        else:
            line.append('')  # 超出范围添加空字符
    return ''.join(line)  # 返回连接后的字符串


def get_diagonal_rl(board, row, col):
    line = []  # 初始化一个空列表存储右上到左下的对角线字符
    for i in range(-4, 5):  # 从-4到+5的范围内获取字符
        r = row + i  # 计算行索引
        c = col - i  # 计算列索引
        if 0 <= r < 15 and 0 <= c < 15:  # 如果行和列索引在棋盘范围内
            line.append(board[r][c])  # 添加棋盘上的字符
        else:
            line.append('')  # 超出范围添加空字符
    return ''.join(line)  # 返回连接后的字符串


# 访问服务器获取数据
url = "http://183.175.12.27:8002/step_07"  # 服务器URL
response = requests.get(url)  # 发起GET请求
print(response.text)  # 打印响应文本
if response.status_code == 200:  # 如果响应状态码是200（请求成功）
    data = response.json()  # 解析响应为JSON格式
    board_str = data['board']  # 获取棋盘字符串
    coords = data['coord']  # 获取考察点坐标

    # 解析棋盘
    board = parse_board(board_str)  # 调用parse_board函数解析棋盘

    # 输出解析后的棋盘
    print("Parsed Board:")
    for row in board:
        print(''.join(row))  # 打印每一行棋盘

    # 获取所有考察点的棋型字符串
    all_patterns = []  # 初始化一个空列表存储所有棋型字符串
    for coord in coords:  # 遍历所有考察点坐标
        letters = 'ABCDEFGHIJKLMNO'  # 棋盘行对应的字母
        row = letters.index(coord[0].upper())  # 获取行索引
        col = letters.index(coord[1].upper())  # 获取列索引

        patterns = [
            get_horizontal(board, row, col),  # 获取水平棋型
            get_diagonal_lr(board, row, col),  # 获取左上到右下的对角线棋型
            get_vertical(board, row, col),  # 获取垂直棋型
            get_diagonal_rl(board, row, col)  # 获取右上到左下的对角线棋型
        ]

        # 将棋型添加到all_patterns列表中
        all_patterns.extend(patterns)

        print(f"Patterns for {coord}: {patterns}")  # 输出每个考察点的棋型

    # 将所有棋型字符串用逗号分隔
    ans = ','.join(all_patterns)

    # 提交结果到服务器
    submission_response = requests.get(url, params={'ans': ans})  # 发送包含答案的GET请求
    print(submission_response.text)  # 打印服务器的响应文本

